home *** CD-ROM | disk | FTP | other *** search
-
- ;TITLE MACHINE LANGUAGE FUNCTIONS FOR THE 990 SERIES CROSS-ASSEMBLER V. 1.0
- ; SUBTTL DIRECTORY
- ;
- ; TMS9900/99105 FAMILY CROSS-ASSEMBLER V. 1.0
- ;
- ; JANUARY, 1984
- ;
- ; ORIGINAL 6800 VERSION BY WILLIAM C. COLLEY, III.
- ; UPDATED 9900/99105 VERSION BY ALEXANDER CAMERON.
- ;
- ;FILE: A99TBLS.CSM
- ;
- ;MACHINE LANGUAGE FUNCTIONS.
- ;
- ;
- ;
- ;THIS FUNCTION GETS OPCODE NUMBER NUM FROM THE OPCODE TABLE. THE FUNCTION
- ;RETURNS 0 IF THE OPCODE WAS NOT FOUND, 1 IF IT WAS.
- ;
- ;FUNCTION IS CALLED AS FOLLOWS:
- ;
- ; GETOPC(NUM,OPCODE,VALUE,ATTRIB);
- ;
- ; NUM CHARACTER CONTAINING THE NUMBER OF THE DESIRED ENTRY.
- ; 0 REPRESENTS THE FIRST ENTRY IN THE TABLE. THE
- ; TABLE IS IN ALPHABETICAL ORDER FOR THE BENEFIT
- ; OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
- ; OPCODE POINTER TO A 5-CHARACTER ARRAY WHICH WILL RECEIVE THE
- ; OPCODE'S NAME (NULL TERMINATED).
- ; VALUE POINTER TO A CHARACTER THAT WILL RECEIVE THE OPCODE'S
- ; VALUE.
- ; ATTRIB POINTER TO A CHARACTER THAT WILL RECEIVE THE OPCODE'S
- ; ATTIBUTE BYTE.
- ;
- INCLUDE A99BDS.LIB
-
- FUNCTION GETOPC
-
- NUM EQU ARG1
- OPCODE EQU ARG2
- VALUE EQU ARG3
- ATTRIB1 EQU ARG4
- ;
- CALL ARGHAK
- LDA NUM ;GET ENTRY NUMBER.
- CPI OPTBLL ;ENTRY IN TABLE?
- LXI H, 0 ;IF NOT, RETURN 0.
- RNC
- ;
- PUSH B ;IF SO, WE'RE GOING TO HAVE TO DO SOME
- PUSH D ;SERIOUS CRUNCHING.
- ;
- MOV L,A ;FIND ENTRY BY COMPUTING
- DAD H ;(N * NUM) + TABLE BASE.
- MOV C,L
- MOV B,H
- DAD H
- DAD B ;N=6
- ; DAD B ;N=8
- MOV C,A ;BC=NUM
- MVI B,0
- DAD B ;7*NUM
- LXI B,OPCTBL
- DAD B
- MOV C,L
- MOV B,H
- INX H ;ALSO COMPUTE POSITION OF ARGUMENTS.
- INX H
- INX H
- INX H
- PUSH H
- ;
- MVI E, 4 ;MOVE OPCODE OUT TO RETURN AREA.
- LHLD OPCODE
- MOVOPC: LDAX B
- CPI ' '
- JZ ENDOPC
- INX B
- MOV M,A
- INX H
- DCR E
- JNZ MOVOPC
- ;
- ENDOPC: MVI M, 0 ;TERMINATE OPCODE.
- ;
- LHLD ATTRIB1 ;MOVE ATTRIBUTE BYTE OUT TO RETURN AREA.
- POP B
- LDAX B
- INX B
- MOV M,A
- LHLD VALUE ;MOVE VALUE BYTE OUT TO RETURN AREA.
- LDAX B
- INX B
- MOV M,A
- INX H
- LDAX B
- MOV M,A
- LXI H, 1 ;RETURN 1 FOR SUCCESSFUL GET.
- POP D
- POP B
- RET
- ;
- ;THE OPCODE TABLE ITSELF:
- ;
- ; EACH ENTRY HAS A THREE-BYTE NAME, A ONE-BYTE ATTRIBUTE,
- ; AND A TWO-BYTE BASIC OPCODE VALUE AS DEFINED IN THE 990 SERIES
- ; HANDBOOKS.
- ;
- ; THE ATTRIBUTE BYTE BITS ARE ALLOCATED AS FOLLOWS:
- ;
- ; 7 = SET IF PSEUDO-OP.
- ; 6 = SET IF PSEUDO-OP AND NO LABEL IS ALLOWED
- ; 5,4,3 REPRESENT OPCODE 2ND ADDRESSING MODE IF PRESENT
- ; 2,1,0 " " 1ST " " " "
- ;
- ; NOTES. FOR FURTHER INFORMATION ON HOW THE ADDRESSING ATTRIBUTE
- ; BITS ARE DERIVED FOR EACH INSTRUCTION REFER TO THE MANUAL.
- ; SECTION 1.4.
- ;
- ;
- OPCTBL0 EQU $
- ;
- OPCTBL DB 'A ',09H ;MNEMONIC FOLLOWED BY ATTRRIBUTE BYTE
- DW 0A000H ;BASIC OPCODE VALUE
- DB 'AB ',09H
- DW 0B000H
- DB 'ABS ',01H
- DW 0740H
- DB 'AI ', 35H
- DW 0220H
- DB 'ANDI', 35H
- DW 0240H
- DB 'AORG',80H
- DW 0000H
- DB 'B ',01H
- DW 0440H
- DB 'BIND',01H ;TMS99000 INSTRUCTION
- DW 0140H
- DB 'BL ',01H
- DW 0680H
- DB 'BLSK',35H ;TMS99000 INSTRUCTION
- DW 00B0H
- DB 'BLWP',01H
- DW 0400H
- DB 'BSS ', 80H
- DW 0005H
- DB 'BYTE', 80H
- DW 0002H
- DB 'C ', 09H
- DW 8000H
- DB 'CB ', 09H
- DW 9000H
- DB 'CI ',35H
- DW 0280H
- DB 'CKOF',00H
- DW 03C0H
- DB 'CKON',00H
- DW 03A0H
- DB 'CLR ',01H
- DW 04C0H
- DB 'COC ',19H
- DW 2000H
- DB 'CZC ',19H
- DW 2400H
- DB 'DEC ',01H
- DW 0600H
- DB 'DECT',01H
- DW 0640H
- DB 'DIV ',19H
- DW 3C00H
- DB 'DIVS',01H ;TMS99000 INSTRUCTION
- DW 0180H
- DB 'DXOP',0C0H ; Define Extended Operation
- DW 000CH
- DB 'ELSE',0C0H
- DW 0007H
- DB 'END ',80H
- DW 0006H
- DB 'ENDI',0C0H
- DW 0008H
- DB 'EQU ',80H
- DW 0001H
- DB 'EVEN',80H
- DW 000BH
- DB 'IDLE',00H
- DW 0340H
- DB 'IF ',0C0H
- DW 0009H
- DB 'INC ',01H
- DW 0580H
- DB 'INCT',01H
- DW 05C0H
- DB 'INV ',01H
- DW 0540H
- DB 'JEQ ',02H
- DW 1300H
- DB 'JGT ',02H
- DW 1500H
- DB 'JH ',02H
- DW 1B00H
- DB 'JHE ',02H
- DW 1400H
- DB 'JL ',02H
- DW 1A00H
- DB 'JLE ',02H
- DW 1200H
- DB 'JLT ',02H
- DW 1100H
- DB 'JMP ',02H
- DW 1000H
- DB 'JNC ',02H
- DW 1700H
- DB 'JNE ',02H
- DW 1600H
- DB 'JNO ',02H
- DW 1900H
- DB 'JOC ',02H
- DW 1800H
- DB 'JOP ',02H
- DW 1C00H
- DB 'LDCR',19H
- DW 3000H
- DB 'LI ',35H
- DW 0200H
- DB 'LIMI',06H
- DW 0300H
- DB 'LREX',00H
- DW 03E0H
- DB 'LST ',05H ;TMS99000 INSTRUCTION
- DW 0080H
- DB 'LWP ',05H ;TMS99000 INSTRUCTION
- DW 0090H
- DB 'LWPI',06H
- DW 02E0H
- DB 'MOV ',09H
- DW 0C000H
- DB 'MOVB',09H
- DW 0D000H
- DB 'MPY ',19H
- DW 3800H
- DB 'MPYS',01H ;TMS99000 INSTRUCTION
- DW 01C0H
- DB 'NEG ',01H
- DW 0500H
- DB 'NOP ',00H
- DW 1000H
- DB 'ORI ',35H
- DW 0260H
- DB 'RSET',00H
- DW 0360H
- DB 'RT ',00H
- DW 045BH
- DB 'RTWP',00H
- DW 0380H
- DB 'S ',09H
- DW 6000H
- DB 'SB ',09H
- DW 7000H
- DB 'SBO ',04H
- DW 1D00H
- DB 'SBZ ',04H
- DW 1E00H
- DB 'SET ',80H
- DW 000AH
- DB 'SETO',01H
- DW 0700H
- DB 'SLA ',2DH
- DW 0A00H
- DB 'SOC ',09H
- DW 0E000H
- DB 'SOCB',09H
- DW 0F000H
- DB 'SRA ',2DH
- DW 0800H
- DB 'SRC ',2DH
- DW 0B00H
- DB 'SRL ',2DH
- DW 0900H
- DB 'STCR',09H
- DW 3400H
- DB 'STST',05H
- DW 02C0H
- DB 'STWP',05H
- DW 02A0H
- DB 'SWPB',01H
- DW 06C0H
- DB 'SZC ',09H
- DW 4000H
- DB 'SZCB',09H
- DW 5000H
- DB 'TB ',04H
- DW 1F00H
- DB 'TCMB',07H ;TMS99105 INSTRUCTION
- DW 0C0AH
- DB 'TEXT', 80H
- DW 0004H
- DB 'TMB ',07H ;TMS99105 INSTRUCTION
- DW 0C09H
- DB 'TROF',00H
- DW 03C0H
- DB 'TRON',00H
- DW 03E0H
- DB 'TSMB',07H ;TMS99105 INSTRUCTION
- DW 0C0BH
- DB 'WORD',80H
- DW 0003H
- DB 'WREN',00H
- DW 03A0H
- DB 'X ',01H
- DW 0480H
- DB 'XOP ',19H
- DW 2C00H
- DB 'XOR ',19H
- DW 2800H
- ;
- OPTBLL EQU ($-OPCTBL0)/7 ;CALCULATE LENGTH OF TABLE.
- ;
-
- ENDFUNCTION getopc
- ;
- ; SUBTTL FUNCTION 2 -- GETS THE NUMBER OF OPCODES IN THE OPCODE TABLE
- ; PAGE
- ;
- ;THIS FUNCTION RETURNS THE NUMBER OF OPCODES IN THE OPCODE TABLE
- ;FOR THE BENEFIT OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
- ;
- ;THIS FUNCTION IS CALLED AS FOLLOWS:
- ;
- ; NUMOPCS();
- ;
-
- FUNCTION numopcs
-
- LXI H,OPTBLL ;RETURN NUMBER OF OPCODES
- RET
-
- ENDFUNCTION numopcs
- ;
- ;
- ;;
- ; SUBTTL FUNCTION 3 -- GETS THE ATTRIBUTE BYTE OF AN ASCII CHARACTER
- ; PAGE
- ;
- ;THIS FUNCTION REMOVES THE PARITY BIT FROM ITS ARGUMENT AND LOOKS IT UP IN
- ;A TABLE. THE TABLE CLASSIFIES THE CHARACTER INTO ONE OF THE FOLLOWING BINS
- ;RETURNING THE APPROPRIATE CODE.
- ;
- ALPHA EQU 0 ;ALPHABETIC.
- NUMERC EQU 1 ;NUMERIC (0-9).
- ENDLIN EQU 2 ;END OF LINE MARKERS (CR ;).
- COMMA EQU 3 ;FIELD SEPARATORS (,).
- OPERAT EQU 4 ;OPERATORS (* + / - > < = ( )).
- BASDES EQU 5 ;BASE DESIGNATORS (# %).
- QUOTE EQU 6 ;STRING DELIMITERS (' ").
- BLANK EQU 10 ;WHITE SPACE CHARACTER (SPC TAB).
- TRASH EQU 11 ;OTHER CONTROL CHARACTERS.
- ;
- ;THE FUNCTION IS CALLED AS FOLLOWS:
- ;
- ; GETATTR(BYTE);
- ;
- ; BYTE CHARACTER VALUE TO BE LOOKED UP.
- ;
- BLOCK MACRO VALU,SIZE
- REPT SIZE
- DB VALU
- ENDM
- ENDM
- ;
- ;
- FUNCTION getattr
-
- CALL MA1TOH
- ANI 7FH ;STRIP PARTIY BIT
- ;
- LXI H,ATTTBL ;INDEX INTO TABLE
- ADD L
- MOV L,A
- MVI A, 0
- ADC H
- MOV H,A
- ;
- MOV L,M ;RETURN RESULT.
- MVI H, 0
- RET
- ;
- ;ATTRIBUTE TABLE ITSELF:
- ;
- ;
- ATTTBL: BLOCK TRASH,9 ; ^@ THRU ^H
- DB BLANK ; TAB
- DB ENDLIN ; LF
- DB TRASH ; ^K
- DB TRASH ; FF
- DB TRASH ; CR
- BLOCK TRASH,18 ; ALL OTHER CONTROL CHARACTERS
- DB BLANK ;SPC
- DB ALPHA ; !
- DB QUOTE ; "
- DB BASDES ; #
- DB OPERAT ; $
- DB BASDES ; %
- DB ALPHA ; &
- DB QUOTE ; '
- DB OPERAT ; (
- DB OPERAT ; )
- DB OPERAT ; *
- DB OPERAT ; +
- DB COMMA ; ,
- DB OPERAT ; -
- DB ALPHA ; .
- DB OPERAT ; /
- BLOCK NUMERC,10 ; 0 THRU 9
- DB ALPHA ; :
- DB ENDLIN ; ;
- DB OPERAT ; <
- DB OPERAT ; =
- DB OPERAT ; >
- DB ALPHA ; ?
- DB OPERAT ; @
- BLOCK ALPHA,26 ; A THRU Z
- DB ALPHA ; [
- DB ALPHA ; \
- DB ALPHA ; ]
- DB ALPHA ; ^
- DB ALPHA ; _
- DB ALPHA ; `
- BLOCK ALPHA,26 ; SMALL A THRU SMALL Z
- DB ALPHA ; {
- DB ALPHA ; |
- DB ALPHA ; }
- DB ALPHA ; ~
- DB TRASH ; RUB
- ;
- ENDFUNCTION getattr
- ;
- ; SUBTTL FUNCTION 4 -- GETS AN OPERATOR FROM THE OPERATOR TABLE
- ; PAGE
- ;
- ;THIS FUNCTION GETS OPERATOR NUMBER NUM FROM THE OPERATOR TABLE. THE FUNCTION
- ;RETURNS 0 IF THE OPERATOR WAS NOT FOUND, 1 IF IT WAS.
- ;
- ;FUNCTION IS CALLED AS FOLLOWS:
- ;
- ; GETOPR(NUM,OPRATR,BS,TOKEN);
- ;
- ; NUM CHARACTER CONTAINING THE NUMBER OF THE DESIRED ENTRY.
- ; 0 REPRESENTS THE FIRST ENTRY IN THE TABLE. THE
- ; TABLE IS IN ALPHABETICAL ORDER FOR THE BENEFIT
- ; OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
- ; OPRATR POINTER TO A 5-CHARACTER ARRAY WHICH WILL RECEIVE THE
- ; OPERATOR'S NAME (NULL TERMINATED).
- ; BS A DUD ARGUMENT TO MAINTAIN COMPATIBILITY WITH GETOPC.
- ; TOKEN A POINTER TO A CHARACTER THAT WILL RECEIVE THE OPERATOR'S
- ; TOKEN BYTE.
- ;
- OPRATR EQU ARG2
- TOKEN EQU ARG4
- ;
- ;
- ;BODY OF FUNCTION:
- ;
- ;
-
- FUNCTION getopr
-
- CALL ARGHAK
- LDA NUM ;GET ENTRY NUMBER.
- CPI OPRTLL ;ENTRY IN TABLE?
- LXI H, 0 ;IF NOT, RETURN 0.
- RNC
- ;
- PUSH B ;IF SO, WE'RE GOING TO HAVE TO DO SOME
- PUSH D ;SERIOUS CRUNCHING.
- ;
- MOV L,A ;FIND ENTRY BY COMPUTING
- ADD A ;(5 * NUM) + TABLE BASE.
- ADD A
- ADD L
- MOV L,A
- LXI b,OPRTBL
- DAD B
- MOV C,L
- MOV B,H
- INX H ;ALSO COMPUTE POSITION OF TOKEN.
- INX H
- INX H
- INX H
- PUSH H
- ;
- MVI E, 4 ;MOVE OPERATOR NAME TO RETURN AREA.
- LHLD OPRATR
- MOVOPR: LDAX B
- CPI ' '
- JZ ENDOPR
- INX B
- MOV M,A
- INX H
- DCR E
- JNZ MOVOPR
- ;
- ENDOPR: MVI M, 0 ;TERMINATE OPERATOR NAME.
- ;
- LHLD TOKEN ;MOVE TOKEN TO RETURN AREA.
- POP B
- LDAX B
- MOV M,A
- ;
- LXI H, 1 ;RETURN 1 FOR SUCCESSFUL GET.
- POP D
- POP B
- RET
- ;
- ;THE OPERATOR TABLE ITSELF:
- ;
- ; THE OPERATOR TOKENS ARE AS FOLLOWS:
- ;
- GETKN EQU 1
- NETKN EQU 2
- LETKN EQU 3
- ANDTKN EQU 4
- ORTKN EQU 5
- XORTKN EQU 6
- NOTTKN EQU 7
- MODTKN EQU 8
- SHLTKN EQU 9
- SHRTKN EQU 10
- HITKN EQU 11
- LOWTKN EQU 12
- GTTKN EQU '>'
- EQTKN EQU '='
- LTTKN EQU '<'
- ;
- OPRTBL0 equ $
- OPRTBL: DB 'AND ', ANDTKN
- DB 'EQ ', EQTKN
- DB 'GE ', GETKN
- DB 'GT ', GTTKN
- DB 'HIGH', HITKN
- DB 'LE ', LETKN
- DB 'LOW ', LOWTKN
- DB 'LT ', LTTKN
- DB 'MOD ', MODTKN
- DB 'NE ', NETKN
- DB 'NOT ', NOTTKN
- DB 'OR ', ORTKN
- DB 'SHL ', SHLTKN
- DB 'SHR ', SHRTKN
- DB 'XOR ', XORTKN
- ;
- OPRTLL EQU ($-OPRTBL0)/5 ;CALCULATE LENGTH OF TABLE.
- ;
- ENDFUNCTION getopr
- ;
- ;SUBTTL FUNCTION 5 -- GETS THE NUMBER OF OPERATORS IN THE OPERATOR TABLE
- ; PAGE
- ;
- ;THIS FUNCTION RETURNS THE NUMBER OF OPERATORS IN THE OPERATOR TABLE
- ;FOR THE BENEFIT OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
- ;
- ;THIS FUNCTION IS CALLED AS FOLLOWS:
- ;
- ; NUMOPRS();
- ;
- ;BODY OF FUNCTION:
- ;
- ;
-
- FUNCTION numoprs
-
- STBOD5: LXI H, OPRTLL ;RETURN NUMBER OF OPCODES.
- RET
- ;
-
- ENDFUNCTION numoprs
- ;
- END